package demo2;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:张熳
 * Date:2025-08-23
 * Time:21:57
 */
//继承
//父类成员访问 + super关键字

public class Derievd extends Base{
    public int c = 3;
    public int a = 100;//与父类成员变量同名，且类型相同，优先访问子类自己的成员变量

    public void methodB(){
        System.out.println("Derived中的methodB()方法");
    }
    public void methodA(){
        System.out.println("Derived中的methodA()方法");
    }
    public void methodA(int x){
        System.out.println("Derived中的methodA(int)方法");
    }

    //在子类中访问父类的成员变量 - 父类和子类无同名
    public void func(){
        System.out.println(a);//访问从父类中继承下来的a
        System.out.println(b);//访问从父类中继承下来的b
        System.out.println(c);//访问子类自己的c
    }
    //在子类中访问父类的成员变量 - 父类和子类同名
    public void func1(){
        System.out.println(a);//访问子类自己的a
        System.out.println(b);//访问从父类中继承下来的b
        System.out.println(c);//访问子类自己的c
    }

    //子类中访问父类的成员方法 - 父类和子类无同名
    public void fun(){
        methodA();//访问父类继承的methodA
        methodB();//访问子类自己的methodB
    }
    //子类中访问父类的成员方法 - 父类和子类同名,参数列表相同
    public void fun1(){
        methodA();//访问子类自己的methodA
        methodB();//访问子类自己的methodB
    }
    //子类中访问父类的成员方法 - 父类和子类同名,参数列表不同（构成重载）
    public void fun2(){
        methodA();//访问父类继承的methodA
        methodA(18);//访问子类自己的methodA
        methodB();//访问子类自己的methodB
    }

    //super关键字访问与子类同名的父类成员变量/方法
    public void func2(){
        //对于同名的成员变量，直接访问时，访问的都是子类的,即a等价于this.a（this是当前对象的引用）
        //访问父类的成员变量时，需要借助super关键字, super是获取到子类对象中从父类继承下来的部分
        System.out.println("父类的a:"+super.a);
        System.out.println("子类的a:"+this.a);
        System.out.println(this.c);
    }
    public void fun3(){
        System.out.print("子类的methodA()方法:");
        this.methodA();//直接访问，则永远访问到的都是子类中的methodA()，父类的无法访问到

        System.out.print("父类的methodA()方法:");
        super.methodA();//访问父类的methodA()
    }
}
